home *** CD-ROM | disk | FTP | other *** search
/ QRZ! Ham Radio 1 / QRZ Ham Radio Callsign Database - December 1993.iso / ucsd / packet / tcpip / amiga / asrc29k.lha / nrdump.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-01-08  |  2.9 KB  |  114 lines

  1. #include <stdio.h>
  2. #include "global.h"
  3. #include "mbuf.h"
  4. #include "netrom.h"
  5. #include "nr4.h"
  6. #include "trace.h"
  7.  
  8. /* Display NET/ROM network and transport headers */
  9. void
  10. netrom_dump(fp,bpp)
  11. FILE *fp;
  12. struct mbuf **bpp;
  13. {
  14.     char src[AXALEN],dest[AXALEN];
  15.     char x;
  16.     char tmp[AXBUF];
  17.     char thdr[NR4MINHDR];
  18.     register i;
  19.  
  20.     if(bpp == NULLBUFP || *bpp == NULLBUF)
  21.         return;
  22.     /* See if it is a routing broadcast */
  23.     if(uchar(*(*bpp)->data) == NR3NODESIG) {
  24.         pullup(bpp,tmp,1);        /* Signature */
  25.         pullup(bpp,tmp,ALEN);
  26.         tmp[ALEN] = '\0';
  27.         fprintf(fp,"NET/ROM Routing: %s\n",tmp);
  28.         for(i = 0;i < NRDESTPERPACK;i++) {
  29.             if (pullup(bpp,src,AXALEN) < AXALEN)
  30.                 break;
  31.             fprintf(fp,"        %12s",pax25(tmp,src));
  32.             pullup(bpp,tmp,ALEN);
  33.             tmp[ALEN] = '\0';
  34.             fprintf(fp,"%8s",tmp);
  35.             pullup(bpp,src,AXALEN);
  36.             fprintf(fp,"    %12s",pax25(tmp,src));
  37.             pullup(bpp,tmp,1);
  38.             fprintf(fp,"    %3u\n",uchar(tmp[0]));
  39.         }
  40.         return;
  41.     }
  42.     /* Decode network layer */
  43.     pullup(bpp,src,AXALEN);
  44.     fprintf(fp,"NET/ROM: %s",pax25(tmp,src));
  45.  
  46.     pullup(bpp,dest,AXALEN);
  47.     fprintf(fp,"->%s",pax25(tmp,dest));
  48.  
  49.     pullup(bpp,&x,1);
  50.     fprintf(fp," ttl %d\n",uchar(x));
  51.  
  52.     /* Read first five bytes of "transport" header */
  53.     pullup(bpp,thdr,NR4MINHDR);
  54.     switch(thdr[4] & NR4OPCODE){
  55.      case NR4OPPID:    /* network PID extension */
  56.         if (thdr[0] == NRPROTO_IP && thdr[1] == NRPROTO_IP) {
  57.              ip_dump(fp,bpp,1) ;
  58.             return;
  59.         }
  60.          else
  61.              fprintf(fp,"         protocol family %x, proto %x",
  62.              uchar(thdr[0]), uchar(thdr[1])) ;
  63.          break ;
  64.     case NR4OPCONRQ:    /* Connect request */
  65.         fprintf(fp,"         conn rqst: ckt %d/%d",uchar(thdr[0]),uchar(thdr[1]));
  66.         pullup(bpp,&x,1);
  67.         fprintf(fp," wnd %d",x);
  68.         pullup(bpp,src,AXALEN);
  69.         fprintf(fp," %s",pax25(tmp,src));
  70.         pullup(bpp,dest,AXALEN);
  71.         fprintf(fp,"@%s",pax25(tmp,dest));
  72.         break;
  73.     case NR4OPCONAK:    /* Connect acknowledgement */
  74.         fprintf(fp,"         conn ack: ur ckt %d/%d my ckt %d/%d",
  75.          uchar(thdr[0]), uchar(thdr[1]), uchar(thdr[2]),
  76.          uchar(thdr[3]));
  77.         pullup(bpp,&x,1);
  78.         fprintf(fp," wnd %d",x);
  79.         break;
  80.     case NR4OPDISRQ:    /* Disconnect request */
  81.         fprintf(fp,"         disc: ckt %d/%d",
  82.          uchar(thdr[0]),uchar(thdr[1]));
  83.         break;
  84.     case NR4OPDISAK:    /* Disconnect acknowledgement */
  85.         fprintf(fp,"         disc ack: ckt %d/%d",
  86.          uchar(thdr[0]),uchar(thdr[1]));
  87.         break;
  88.     case NR4OPINFO:    /* Information (data) */
  89.         fprintf(fp,"         info: ckt %d/%d",
  90.          uchar(thdr[0]),uchar(thdr[1]));
  91.         fprintf(fp," txseq %d rxseq %d",
  92.          uchar(thdr[2]), uchar(thdr[3]));
  93.         break;
  94.     case NR4OPACK:    /* Information acknowledgement */
  95.         fprintf(fp,"         info ack: ckt %d/%d",
  96.          uchar(thdr[0]),uchar(thdr[1]));
  97.         fprintf(fp," txseq %d rxseq %d",
  98.          uchar(thdr[2]), uchar(thdr[3]));
  99.         break;
  100.     default:
  101.          fprintf(fp,"         unknown transport type %d",
  102.          thdr[4] & 0x0f) ;
  103.         break;
  104.     }
  105.     if(thdr[4] & NR4CHOKE)
  106.         fprintf(fp," CHOKE");
  107.     if(thdr[4] & NR4NAK)
  108.         fprintf(fp," NAK");
  109.     if(thdr[4] & NR4MORE)
  110.         fprintf(fp," MORE");
  111.     fputc('\n',fp);
  112. }
  113.  
  114.